package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderDO;
import com.ssy.lingxi.order.model.bo.ProcessStepsBO;
import com.ssy.lingxi.order.model.bo.ProcessTaskBO;

import java.util.List;

/**
 * 执行订单流程相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-08-28
 */
public interface IBaseOrderTaskService {
    /**
     * 查询订单流程
     * @param processKey 流程Key
     * @param taskId 流程步骤任务Id
     * @param vendorMemberId 供应商会员Id
     * @param vendorRoleId   供应商会员角色Id
     * @param buyerRoleId   采购商会员角色Id
     * @param externalTaskName 根据外部流程节点名称（子流程名称）查询内部流程
     * @return 查询结果
     */
    Wrapper<ProcessStepsBO> listOrderProcessSteps(String processKey, String taskId, Long vendorMemberId, Long vendorRoleId, Long buyerRoleId, String externalTaskName);

    /**
     * 启动订单流程
     * @param order 订单
     * @return 启动结果
     */
    Wrapper<ProcessTaskBO> startOrderProcess(OrderDO order);

    /**
     * 启动订单流程，并执行第一个任务
     * @param order 订单
     * @return 启动结果
     */
    Wrapper<ProcessTaskBO> startOrderProcessThenExecFirstTask(OrderDO order);

    /**
     * 执行订单流程
     * @param order 订单
     * @return 执行结果
     */
    Wrapper<ProcessTaskBO> execOrderProcess(OrderDO order);

    /**
     * 执行订单流程
     * @param order 订单
     * @param agree 流程图定义的跳转参数
     * @return 执行结果
     */
    Wrapper<ProcessTaskBO> execOrderProcess(OrderDO order, Integer agree);

    /**
     * 连续执行支付流程
     * @param order 订单
     * @param execTimes  执行次数
     * @param agrees     跳转参数列表
     * @return 执行结果
     */
    Wrapper<ProcessTaskBO> execOrderPayTasks(OrderDO order, Integer execTimes, List<Integer> agrees);
}
